There are various types of communications environments, and each type may handle messages differently. In one type of communications environment, messages are transported from a sender of the environment to a receiver of the environment, but the order of the messages is not guaranteed. For example, in the Internet Protocol Suite/User Datagram Protocol (UDP/IP), user datagrams (packets) can be dropped in the communications network, causing out of order arrivals when packets are retransmitted. For those environments in which ordering is not guaranteed, measures need to be taken to ensure proper processing of messages.
For environments such as the Transmission Control Protocol (TCP/IP), in which a sequential byte stream is to be presented to the user, a sequence number within the fixed-length UDP/IP datagram suffices to determine the memory location into which the packet is copied. As long as all the packets arrive, there is no requirement that they be stored in any particular order.
Another type of communications environment is a message passing environment, in which the receiver specifies selection criteria for matching incoming messages. Arriving messages that cannot be immediately matched are stored in an unmatched message queue, which is searched each time a receiver provides a new set of specification criteria (called posting a receive). Examples of such systems include the IBM Parallel Environment Message Passing Interface.
Up to now, message passing environments have been built on top of lower level subsystems that provide an in-order delivery of messages, such as TCP/IP. However, the advent of multi-link, high performance packet switched networks has led to the development of message delivery subsystems that do not promise in-order message delivery. Thus, a need exists for a capability that efficiently handles out-of-order delivery in a message passing environment.